package com.example.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.example.entity.enums.CouponGetEnum;
import com.example.entity.enums.CouponStatusEnum;
import com.example.entity.enums.CouponTypeEnum;
import com.example.entity.enums.PromotionsScopeTypeEnum;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 优惠券表
 * @TableName coupon
 */
@TableName(value ="coupon")
@Data
public class Coupon implements Serializable {
    /**
     * ID
     */
    @TableId(value = "id",type = IdType.ASSIGN_ID)
    @JsonFormat(shape =JsonFormat.Shape.STRING )
    private Long id;

    /**
     * 创建者
     */
    @TableField(value = "create_by")
    private String createBy;

    /**
     * 创建时间
     */
    @TableField(value = "create_time")
    private LocalDateTime createTime;

    /**
     * 删除标志 true/false 删除/未删除
     */
    @TableField(value = "delete_flag")
    private Boolean deleteFlag;

    /**
     * 更新者
     */
    @TableField(value = "update_by")
    private String updateBy;

    /**
     * 更新时间
     */
    @TableField(value = "update_time")
    private LocalDateTime updateTime;

    /**
     * 开始时间
     */
    @TableField(value = "start_time")
    private LocalDateTime startTime;

    /**
     * 结束时间
     */
    @TableField(value = "end_time")
    private LocalDateTime endTime;

    /**
     * 活动名称
     */
    @TableField(value = "promotion_name")
    private String promotionName;

    /**
     * 店铺ID
     */
    @TableField(value = "store_id")
    private Long storeId;

    /**
     * 店铺名称
     */
    @TableField(value = "store_name")
    private String storeName;

    /**
     * 优惠券名称
     */
    @TableField(value = "coupon_name")
    private String couponName;

    /**
     * 优惠券类型[0->免费领取；1->活动领取；]
     */
    @TableField(value = "coupon_type")
    private CouponGetEnum couponType;

    /**
     * 优惠券分类[0->满减；1->折扣;3-无门槛]
     */
    @TableField(value = "coupon_category")
    private CouponTypeEnum couponCategory;

    /**
     * 消费门槛
     */
    @TableField(value = "min_point")
    private Integer minPoint;

    /**
     * 折扣值：如果是满减则存满减金额，如果是折扣则存折扣率
     */
    @TableField(value = "reduce_amount")
    private Integer reduceAmount;

    /**
     * 折扣券的最高抵扣金额
     */
    @TableField(value = "max_discount_amount")
    private Integer maxDiscountAmount;

    /**
     * 活动描述
     */
    @TableField(value = "description")
    private String description;

    /**
     * 发行数量
     */
    @TableField(value = "publish_count")
    private Integer publishCount;

    /**
     * 已使用数量
     */
    @TableField(value = "use_count")
    private Integer useCount;

    /**
     * 领取数量
     */
    @TableField(value = "receive_count")
    private Integer receiveCount;

    /**
     * 可以领取的开始日期
     */
    @TableField(value = "enable_start_time")
    private LocalDateTime enableStartTime;

    /**
     * 可以领取的结束日期
     */
    @TableField(value = "enable_end_time")
    private LocalDateTime enableEndTime;

    /**
     * 范围关联的ID
     */
    @TableField(value = "scope_id")
    private Long scopeId;

    /**
     * 关联范围类型:0全品类，1部分商品分类，2部分店铺分类，3指定商品
     */
    @TableField(value = "scope_type")
    private PromotionsScopeTypeEnum scopeType;

    /**
     * 店铺承担比例
     */
    @TableField(value = "store_commission")
    private BigDecimal storeCommission;



    /**
     * 优惠券状态：1未发放，2待开始，3进行中，4已结束，5已失效
     */
    @TableField(value = "status")
    private CouponStatusEnum status;

    /**
     * 每个用户限制领取数量
     */
    @TableField(value = "limit_receive_count")
    private Integer limitReceiveCount;

    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}